/**************************************************************************************************
 * *
 * HUSONG PROPRIETARY INFORMATION                                          *
 * *
 * The information contained herein is proprietary to HUSONG                           *
 * and shall not be reproduced or disclosed in whole or in part                       *
 * or used for any design or manufacture                                     *
 * without direct written authorization from HUSONG.                               *
 * *
 * Copyright (c) 2015 by HUSONG.  All rights reserved.                               *
 **************************************************************************************************/

package com.husong.service;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.List;
import java.util.Map;

import com.husong.entity.Address;
import com.husong.entity.Complain;
import com.husong.entity.Evaluate;
import com.husong.entity.Message;
import com.husong.entity.Order;
import com.husong.entity.OrderBroker;
import com.husong.entity.OrderIndexList;
import com.husong.entity.OrderInfo;
import com.husong.entity.OrderList;
import com.husong.entity.OrderProgress;
import com.husong.entity.OrderWaitList;
import com.husong.entity.Red;
import com.husong.entity.Zan;
import com.husong.pojo.AdvertModel;
import com.husong.pojo.ConmentBean;
import com.husong.pojo.OrderTypeBean;
import com.husong.pojo.RedBean;
import com.husong.pojo.ReturnJsonBean;
import com.husong.pojo.TipBean;

/**
 * create by MaxMin.
 * <p/>
 * email: tjljob@126.com
 * <p/>
 * date:  2015年11月12日 17:38.
 */
public interface OrderDataService {

    /**
     * 获取订单详情
     *
     * @param orderid
     *
     * @return
     */
    Order get(String orderid);
    
    OrderInfo getOrderInfo(String orderid);
    
    Integer getEvaluateCount(Map<String,Object> params);

    /**
     * 发布订单
     *
     * @param order
     *
     * @return
     */
    int create(Order order);
    
    /**
     * 发布订单
     *
     * @param order
     *
     * @return
     */
    void create(Order order,String[] picpaths);

    /**
     * 按类型查询所有
     *
     * @param type
     *
     * @return
     */
    List<Order> findAll(int type, String cityname,String lastDate,Long lastorderid);

    /**
     * 根据用户id和订单类型查询
     *
     * @param key 用户id
     * @param type 查询订单类型 1、呼送中订单 2、历史订单
     *
     * @return
     */
    List<OrderList> findOrdersByUserIdAndType(String key, int type,String lastDate,Long lastorderid);

    /**
     * 按类型查询经纪人订单
     *
     * @param key 用户id
     * @param type 查询订单类型 1、任务中订单 2、历史订单
     *
     * @return
     */
    List<OrderList> findOrdersByBrokerAndType(String key, int type,String lastDate,Long lastorderid);

    /**
     * 获取待抢单列表
     *
     * @param cityname 城市名
     * @param type 订单类型
     *
     * @return
     */
    List<OrderWaitList> findWaitOrders(String key,String cityname, Integer type,String lastDate,Long lastorderid);
    /**
     * 获取首页呼单列表
     *
     * @param cityname 城市名
     * @param type 订单类型
     *
     * @return
     */
    List<OrderIndexList> findIndexOrders(String cityname, Integer type,String lastDate,Long lastorderid);

    /**
     * 取消订单
     *
     * @param orderId
     *
     * @return
     */
    int delete(String orderId);
    
    /**
     * 申请取消订单
     *
     * @param orderId
     *
     * @return
     */
    int need_cancel(String orderId);
    
    /**
     * 查询最后一次抢单时间
     * @param brokerid
     * @return
     */
    Timestamp getLastGrabOrderTimeByBrokerId(String brokerid);
    /**
     * 抢单
     * @param orderid
     * @param userId
     * @param lng
     * @param lat
     * @return
     */
    int grabOrder(String orderid,String userId,String lng,String lat);
    /**
     * 选择经纪人列表
     * @param orderid
     * @param type
     * @return
     */
    List<OrderBroker> chooseBrokerList(String orderid,Integer type);
    
    /**
     * 选择经纪人
     * @param orderbrokerid
     * @return
     */
    int chooseBroker(String orderbrokerid);
    /**
     * 已购买
     * @param orderid
     * @param fee
     * @return
     */
    int buy(String orderid,BigDecimal fee);
    /**
     * 确认完成
     * @param orderid
     * @return
     */
    int confirm(String orderid);
    /**
     * 已取货
     * @param orderid
     * @return
     */
    int got(String orderid);
    /**
     * 已办完
     * @param orderid
     * @return
     */
    int dealed(String orderid);
    
    /**
     * 增加呼单状态记录
     * @return
     */
    int addOrderProgress(OrderProgress progress);
    
    /**
     * 查询呼单状态记录
     * @param orderid
     * @return
     */
    public List<OrderProgress> getOrderProgressesByOrderId(String orderid);
    /**
     * 获取小费列表
     * @return
     */
    List<TipBean> getTips();
    /**
     * 获取广告
     * @return
     */
    List<AdvertModel> getAdverts(String cityname);
    /**
     * 获取订单类型
     * @return
     */
    List<OrderTypeBean> getOrderTypes();
    /**
     * 获取常用地址
     * @return
     */
    List<Address> getAddresses(String user_id);
    /**
     * 根据小费id获取小费
     * @param id
     * @return
     */
    TipBean getTipById(long id);
    
    int addAddress(Address address);
    
    int updateAddress(Address address);
    
    int deletAddress(String id);
    
    Integer getBrokerCounts(String cityname);
    
    Red getRed(String redid);
    
    List<RedBean> getReds(String userid);
    
    List<RedBean> getUsefullReds(String userid);
    
    ReturnJsonBean walletPay(String user_id,String orderid, String redid);
    
    int addEvaluate(String orderid,String userid,String content,BigDecimal point);
    
    
    List<Evaluate> getBrokerToMeEvalustes(String user_id,String lastDateStr,Long lastrowid);
    
    List<Evaluate> getUserToMeEvalustes(String user_id,String lastDateStr,Long lastrowid);
    
    List<Evaluate> getMeToBrokerEvalustes(String user_id,String lastDateStr,Long lastrowid);
    
    List<Evaluate> getMeToUserEvalustes(String user_id,String lastDateStr,Long lastrowid);
    
    List<ConmentBean> getComments(String orderid,String lastDateStr,Long lastrowid);
    
    int addConment(String user_id,String order_id,String parent_commetn_id,String content);
    
    int addZan(String user_id,String order_id);
    
    Integer getZanCount(String order_id);
    
    Integer getConmentCount(String order_id);
    
    List<Zan> getZans(String order_id);
    
    int appendTip(int tipid,String orderid);
    
    public int addMessage(Message message);
    
    public List<Message> getMessages(String userid,int type,String lastDateStr,Long lastrowid);
    
    Integer complain(Complain complain);
    
    Integer getProgeressCount(String orderid,int order_status);
    
    Integer getOrderBrokerCount(String order_id,String user_id);
}
